{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Advanced: Semirings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch_struct\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADGCAYAAAD7ccrCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKsUlEQVR4nO3dX2yV9R3H8c+HgrYUM2Qas1EiXBi2DqeYxqjEXeBccBrcXLJIIlmWJSTb3NCZGF12s5tdbIvTqFuCf/YnGsmmLjHqZGZqFhNlVmCb/DFjiFLFFFQEEYTCdxfndK2ktU/nefh9x3m/EpK2pzn95MG+fXh6eo4jQgCAvKaUHgAA+GiEGgCSI9QAkByhBoDkCDUAJDe1ljvt7I6TZ8yq464rG+rO8WiWzsEjpSfoSFctf82TNuXw0dIT9MGpOc5NphwqvUCaMlR6QcPQ9NILpI4PSi+QDu19W0MH9nus22r5Dj55xiz1Xn59HXdd2eBF5QMpSZ+9fU/pCdrbe2rpCZKkrjfLfzds+1pn6QmSpO4d5f+H0bU7x8nM7vPK7zjl3+X/PrauvmXc28qvAwB8JEINAMkRagBIjlADQHKEGgCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcpVCbXuJ7Zdtb7V9U92jAAAjJgy17Q5Jd0q6TFKvpGW2e+seBgBoqHJGfb6krRGxLSIOSVot6cp6ZwEAhlUJ9WxJO0a9P9D82IfYXmG733b/0MH9rdoHAG2vZT9MjIhVEdEXEX1TO7tbdbcA0PaqhPp1SXNGvd/T/BgA4DioEuoXJJ1le57tkyRdLemRemcBAIZN+JqJETFk+1pJayR1SLo3IjbWvgwAIKnii9tGxOOSHq95CwBgDPxmIgAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRHqAEgOUINAMlVeq6Pyeo8/YDmf6fs8zYd+MOCol9/2Dvnzio9QU/89BelJ0iSvnTzD0pPUEyJ0hMkST1r3io9QQdnn1J6giTptJ+9UXqCLlmzpfQE3faXvePexhk1ACRHqAEgOUINAMkRagBIjlADQHKEGgCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEhuwlDbvtf2oO2XjscgAMCHVTmj/o2kJTXvAACMY8JQR8RfJb19HLYAAMbANWoASK5loba9wna/7f6Dew626m4BoO21LNQRsSoi+iKir3NmZ6vuFgDaHpc+ACC5Kg/Pe0DSc5Lm2x6w/a36ZwEAhk344rYRsex4DAEAjI1LHwCQHKEGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACQ34XN9/C/ef6dL6x9aUMddV3b4gn1Fv/6wr85fV3qCln57ZekJkqR957j0BHUPlN8gSVtu7C49QUsXbCg9QZJ09vSB0hN0x+1XlZ6gtwY3jXsbZ9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBIDlCDQDJTRhq23NsP217k+2NtnM8FRsAtIkqT3M6JOmGiFhn+xRJL9p+MiLGf04+AEDLTHhGHRE7I2Jd8+19kjZLml33MABAw6SuUdueK2mhpLVj3LbCdr/t/iMH9rdmHQCgeqhtz5D0kKTrImLvsbdHxKqI6IuIvo6u8q9eAQAnikqhtj1NjUjfHxEP1zsJADBalUd9WNI9kjZHxC31TwIAjFbljHqRpOWSFtve0Pzz5Zp3AQCaJnx4XkQ8KynHSzcDQBviNxMBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRHqAEgOUINAMkRagBIrspLcU1a7xmDev76O+q468qWXnxV0a8/7HNPDJSeoMfO6Cg9QZL0k2/8rvQEfaX7vdITJEk/Gjy79AR9feYLpSdIkrYfnlV6gs547t3SE/TK/iPj3sYZNQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRHqAEgOUINAMkRagBIbsJQ2+60/Tfbf7e90faPj8cwAEBDlWfP+0DS4oh4z/Y0Sc/a/lNEPF/zNgCAKoQ6IkLS8HNDTmv+iTpHAQBGVLpGbbvD9gZJg5KejIi19c4CAAyrFOqIOBIR50rqkXS+7QXHfo7tFbb7bffvfutoq3cCQNua1KM+ImKPpKclLRnjtlUR0RcRfad9kgeTAECrVHnUx+m2Zzbf7pJ0qaQtdQ8DADRUedTHpyT91naHGmH/fUQ8Wu8sAMCwKo/6+IekhcdhCwBgDFxMBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAkR6gBILkqT8o0abuOnKxf7plXx11XNrRte9GvP+zSrp2lJ+iufx0sPUGSdPuri0tP0F3LD5WeIEnaf96c0hP0x89fXHqCJOn9M4dKT9DMC2tJ4aQM7egY9zbOqAEgOUINAMkRagBIjlADQHKEGgCSI9QAkByhBoDkCDUAJEeoASA5Qg0AyRFqAEiOUANAcoQaAJKrHGrbHbbX2360zkEAgA+bzBn1Skmb6xoCABhbpVDb7pF0uaS7650DADhW1TPqWyXdKOnoeJ9ge4Xtftv97719uCXjAAAVQm37CkmDEfHiR31eRKyKiL6I6Jsxa1rLBgJAu6tyRr1I0lLb2yWtlrTY9n21rgIA/NeEoY6ImyOiJyLmSrpa0lMRcU3tywAAkngcNQCkN6mX3o2IZyQ9U8sSAMCYOKMGgOQINQAkR6gBIDlCDQDJEWoASI5QA0ByhBoAkiPUAJAcoQaA5Ag1ACRHqAEgOUdE6+/U3iXp1Y9xF6dJ2t2iOf/vOBYjOBYjOBYjTpRjcWZEnD7WDbWE+uOy3R8RfaV3ZMCxGMGxGMGxGNEOx4JLHwCQHKEGgOSyhnpV6QGJcCxGcCxGcCxGnPDHIuU1agDAiKxn1ACAJkINAMmlC7XtJbZftr3V9k2l95Rie47tp21vsr3R9srSm0qz3WF7ve1HS28pyfZM2w/a3mJ7s+0LS28qxfb1ze+Pl2w/YLuz9KY6pAq17Q5Jd0q6TFKvpGW2e8uuKmZI0g0R0SvpAknfbeNjMWylpM2lRyRwm6QnIuIzks5Rmx4T27MlfV9SX0QskNQh6eqyq+qRKtSSzpe0NSK2RcQhSaslXVl4UxERsTMi1jXf3qfGN+PssqvKsd0j6XJJd5feUpLtT0j6gqR7JCkiDkXEnrKripoqqcv2VEnTJb1ReE8tsoV6tqQdo94fUBvHaZjtuZIWSlpbdklRt0q6UdLR0kMKmydpl6RfNy8D3W27u/SoEiLidUk/l/SapJ2S3o2IP5ddVY9socYxbM+Q9JCk6yJib+k9Jdi+QtJgRLxYeksCUyWdJ+lXEbFQ0n5JbfmzHNunqvEv7nmSPi2p2/Y1ZVfVI1uoX5c0Z9T7Pc2PtSXb09SI9P0R8XDpPQUtkrTU9nY1Locttn1f2UnFDEgaiIjhf109qEa429EXJb0SEbsi4rCkhyVdVHhTLbKF+gVJZ9meZ/skNX4w8EjhTUXYthrXITdHxC2l95QUETdHRE9EzFXjv4mnIuKEPHOaSES8KWmH7fnND10iaVPBSSW9JukC29Ob3y+X6AT9werU0gNGi4gh29dKWqPGT3DvjYiNhWeVskjSckn/tL2h+bEfRsTjBTchh+9Jur95MrNN0jcL7ykiItbaflDSOjUeJbVeJ+ivk/Mr5ACQXLZLHwCAYxBqAEiOUANAcoQaAJIj1ACQHKEGgOQINQAk9x84NVTei8TabAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f5b6df54080>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Create two random tensors to experiment with.\n",
    "v1 = torch.rand(5, 10)\n",
    "v2 = torch.rand(5, 10)\n",
    "plt.imshow(v1)\n",
    "plt.show()\n",
    "plt.imshow(v2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def show(x, title):\n",
    "    plt.title(title)\n",
    "    plt.imshow(x.detach())\n",
    "    plt.show()\n",
    "def run(sr):\n",
    "    # Convert semiring form.\n",
    "    s1, s2 = sr.convert(v1), sr.convert(v2)\n",
    "    s1.requires_grad_(True)\n",
    "    s2.requires_grad_(True)\n",
    "\n",
    "    # Times and sum out last dim.\n",
    "    s = sr.sum(sr.times(s1, s2))\n",
    "    \n",
    "    # Compute grad.\n",
    "    s.sum().backward()\n",
    "    \n",
    "    show(s, \"Sum\")\n",
    "    # Show the grads\n",
    "    show(sr.unconvert(s1.grad), \"v1 grad\")    \n",
    "    show(sr.unconvert(s2.grad), \"v2 grad\")\n",
    "    m = torch_struct.Alignment(sr).marginals(torch.rand(1, 10, 10, 3), _raw=True)\n",
    "    show(m.sum(-1).sum(0).sum(0).transpose(0,1), \"Alignment example\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Log"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.LogSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.LogSemiring)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Max"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.MaxSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.MaxSemiring)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## K-Max"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAOdklEQVR4nO3df+xddX3H8efL/gAEBRQmrK2UbR0TWKbyXcHgFoIjAUZgydgCyRCMpguBTBOSCS6BzWyJ2x/OGYyEKaKTAA7c9pXUMQw4dAqjsPKrlVnNNtoxUarFAgOK7/3xPaxfv97Sb3sP33Pl83wkN73nnk/P59OT9tnbc380VYUk6ZXvVUMvQJK0MAy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+BCR5e5KvJdmWZGuSf0nyq0OvS+rT4qEXIA0tyWuBW4ALgc8BS4FfA54dcl1S33yGL8EvAlTV9VX1QlU9U1X/VFUPJPnjJJ99cWCSlUkqyeJu+8tJ/rT718H2JF9I8vok1yV5Msk9SVYO88uSfpzBl+DfgReSfDrJaUkO3sOffw5wHrAM+Hng68CngNcBG4Er+lystLcMvppXVU8CbwcK+Gvgu0mmk7xhnof4VFV9q6q2AV8EvlVVX6qqHcDfAm95WRYu7SGDLwFVtbGqLqiq5cCxwM8CH5nnT//OrPvPjNg+oJ9VSuMx+NIcVfUN4Fpmwv8U8OpZuw8bYk1SHwy+mpfkl5JckmR5t70COBe4C1gP/HqSNyY5ELhswKVKYzH4EvwQOB64O8lTzIT+IeCSqroNuBF4ALiXmbdvSj+V4n+AIklt8Bm+JDVirOAneV2S25J8s/tx5PuXk7yQZH13mx5nTknS3hnrkk6SvwC2VtWHklwKHFxV7x8xbntV+dY0SRrQuMF/BDipqh5Lcjjw5ao6asQ4gy9JAxv3Gv4bquqx7v7/ALv6ZOK+SdYluSvJb405pyRpL+z22zKTfInRHzb5o9kbVVVJdvXPhSOqakuSnwNuT/JgVX1rxFxrgDUAS1/9quMOO/LVc4c06Ts/OGjoJUyMJfs/P/QSJsZR+/5g6CVMjP96fv+hlzAxvrtx6/eq6tBR+xbkks6cn3MtcEtV3fRS44449jX1/puO2+u1vZJ8ePrMoZcwMZYd999DL2Fi3HHMPwy9hIlx8Zbjh17CxPj41HX3VtXUqH3jXtKZBs7v7p8P/MTvwCQHJ9mnu38IcCKwYcx5JUl7aNzgfwg4Jck3gd/otkkyleQT3Zg3AeuS3A/cAXyoqgy+JC2wsf7Hq6p6AnjHiMfXAe/p7n8N+OVx5pEkjc9P2kpSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSIwy+JDXC4EtSI3oJfpJTkzySZFOSS0fs3yfJjd3+u5Os7GNeSdL8jR38JIuAjwGnAUcD5yY5es6wdwPfr6pfAP4S+PNx55Uk7Zk+nuGvBjZV1ber6jngBuCsOWPOAj7d3b8JeEeS9DC3JGme+gj+MuDRWdubu8dGjqmqHcA24PVzD5RkTZJ1SdZt//7zPSxNkvSiiXrRtqqurqqpqpo64OAlQy9Hkl5R+gj+FmDFrO3l3WMjxyRZDBwIPNHD3JKkeeoj+PcAq5IcmWQpcA4wPWfMNHB+d/9s4Paqqh7mliTN0+JxD1BVO5JcDNwKLAKuqaqHk3wQWFdV08Angb9JsgnYysxfCpKkBTR28AGqai2wds5jl8+6/7/A7/QxlyRp70zUi7aSpJePwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRvQS/CSnJnkkyaYkl47Yf0GS7yZZ393e08e8kqT5WzzuAZIsAj4GnAJsBu5JMl1VG+YMvbGqLh53PknS3unjGf5qYFNVfbuqngNuAM7q4biSpB71EfxlwKOztjd3j83120keSHJTkhU9zCtJ2gNjX9KZpy8A11fVs0l+H/g0cPLcQUnWAGsA9l16IH93wU8MadL+qzP0EibG9mP3GXoJE+Mfn/ZcvOhH+GdkPvp4hr8FmP2MfXn32P+rqieq6tlu8xPAcaMOVFVXV9VUVU0tWbJ/D0uTJL2oj+DfA6xKcmSSpcA5wPTsAUkOn7V5JrCxh3klSXtg7Es6VbUjycXArcAi4JqqejjJB4F1VTUN/EGSM4EdwFbggnHnlSTtmV6u4VfVWmDtnMcun3X/MuCyPuaSJO0dP2krSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY3oJfhJrknyeJKHdrE/ST6aZFOSB5K8tY95JUnz19cz/GuBU19i/2nAqu62Bvh4T/NKkuapl+BX1Z3A1pcYchbwmZpxF3BQksP7mFuSND8LdQ1/GfDorO3N3WM/JsmaJOuSrHv++acWaGmS1IaJetG2qq6uqqmqmlqyZP+hlyNJrygLFfwtwIpZ28u7xyRJC2Shgj8NvLN7t84JwLaqemyB5pYkAYv7OEiS64GTgEOSbAauAJYAVNVVwFrgdGAT8DTwrj7mlSTNXy/Br6pzd7O/gIv6mEuStHcm6kVbSdLLx+BLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiN6CX6Sa5I8nuShXew/Kcm2JOu72+V9zCtJmr/FPR3nWuBK4DMvMeYrVXVGT/NJkvZQL8/wq+pOYGsfx5IkvTwW8hr+25Lcn+SLSY5ZwHklSfR3SWd37gOOqKrtSU4H/h5YNXdQkjXAGoB9F7+WRVu3L9DyJtvPXPng0EuYGN980/FDL2FibFi5bOglTIz//N03DL2EnwoL8gy/qp6squ3d/bXAkiSHjBh3dVVNVdXU0kX7LcTSJKkZCxL8JIclSXd/dTfvEwsxtyRpRi+XdJJcD5wEHJJkM3AFsASgqq4CzgYuTLIDeAY4p6qqj7klSfPTS/Cr6tzd7L+SmbdtSpIG4idtJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRYwc/yYokdyTZkOThJO8dMSZJPppkU5IHkrx13HklSXtmcQ/H2AFcUlX3JXkNcG+S26pqw6wxpwGrutvxwMe7HyVJC2TsZ/hV9VhV3dfd/yGwEVg2Z9hZwGdqxl3AQUkOH3duSdL89XoNP8lK4C3A3XN2LQMenbW9mZ/8S4Eka5KsS7LuuRee6XNpktS83oKf5ADgZuB9VfXk3hyjqq6uqqmqmlq6aL++liZJoqfgJ1nCTOyvq6rPjxiyBVgxa3t595gkaYH08S6dAJ8ENlbVh3cxbBp4Z/dunROAbVX12LhzS5Lmr4936ZwInAc8mGR999gHgDcCVNVVwFrgdGAT8DTwrh7mlSTtgbGDX1VfBbKbMQVcNO5ckqS95ydtJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGmHwJakRBl+SGjF28JOsSHJHkg1JHk7y3hFjTkqyLcn67nb5uPNKkvbM4h6OsQO4pKruS/Ia4N4kt1XVhjnjvlJVZ/QwnyRpL4z9DL+qHquq+7r7PwQ2AsvGPa4kqV+9XsNPshJ4C3D3iN1vS3J/ki8mOabPeSVJu5eq6udAyQHAPwN/VlWfn7PvtcCPqmp7ktOBv6qqVSOOsQZY020eBTzSy+LGcwjwvaEXMSE8Fzt5LnbyXOw0CefiiKo6dNSOXoKfZAlwC3BrVX14HuP/A5iqqqFPzG4lWVdVU0OvYxJ4LnbyXOzkudhp0s9FH+/SCfBJYOOuYp/ksG4cSVZ38z4x7tySpPnr4106JwLnAQ8mWd899gHgjQBVdRVwNnBhkh3AM8A51de1JEnSvIwd/Kr6KpDdjLkSuHLcuQZy9dALmCCei508Fzt5Lnaa6HPR24u2kqTJ5lcrSFIjDP4uJDk1ySNJNiW5dOj1DCnJNUkeT/LQ0GsZ0ny+RqQVSfZN8q/dZ2seTvInQ69paEkWJfm3JLcMvZZdMfgjJFkEfAw4DTgaODfJ0cOualDXAqcOvYgJ8OLXiBwNnABc1PDvi2eBk6vqV4A3A6cmOWHgNQ3tvcx808DEMvijrQY2VdW3q+o54AbgrIHXNJiquhPYOvQ6hubXiOxUM7Z3m0u6W7MvCCZZDvwm8Imh1/JSDP5oy4BHZ21vptE/2BptN18j0oTuEsZ64HHgtqpq9lwAHwH+EPjR0At5KQZf2kPd14jcDLyvqp4cej1DqaoXqurNwHJgdZJjh17TEJKcATxeVfcOvZbdMfijbQFWzNpe3j2mxnVfI3IzcN3c74xqVVX9ALiDdl/nORE4s/vKmBuAk5N8dtgljWbwR7sHWJXkyCRLgXOA6YHXpIHN52tEWpHk0CQHdff3A04BvjHsqoZRVZdV1fKqWslMK26vqt8beFkjGfwRqmoHcDFwKzMvzH2uqh4edlXDSXI98HXgqCSbk7x76DUN5MWvETl51v/edvrQixrI4cAdSR5g5gnSbVU1sW9H1Aw/aStJjfAZviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiMMviQ1wuBLUiP+DysUuhhrxx2gAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.KMaxSemiring(3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Counting"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.StdSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADWCAYAAAD4p8hZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAANWklEQVR4nO3df6zddX3H8eeLW6SlEAEhZNBOSDTMrk4hHUOZm0M0IA5/bCFgxMVsYUPdEE2YuLmpyUw2jRPRsSCiW+RHFFjGGMLMhDg2YZQfKqU4Kz9ssablZ6FQoOW9P865tjS3vadwTz8fep+P5Cb3nO83n/M6X3pefO7nfM/3pKqQJPVrt9YBJEnbZ1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopZeoCT3Jjm2dQ7tuixqvegk+WySHyd5LMldSd7bOpM0TnNaB5Ceh/XA7wL/B/w6cE2SFVX1Py904CQTVbXphY4jzSRn1OpOkj9PctlW952T5AsAVfXXVXVXVT1bVTcB/wW8bjvjnZVkdZKfJfmjJJXkFcNtX0tyXpKrk6wHfifJCUluS7Iuycokn9hqvFOT3JfkwSR/MdPPX9qaRa0eXQq8NcneMJjlAicBF2+9Y5J5DGbVy6YaKMlxwIeBY4FXAG+cYrd3A38D7A3cwGDG/l5gH+AE4PQk7xiOtwg4DzgVOAh4GbDg+T1NaTQWtbpTVfcBtwLvHN51DPBEVd04xe7/CHwfuHYbw50EfLWqllXVE8AnptjnX6vqv4cz9A1VdX1V/XB4+wfAJcBvD/f9feCqqvpuVT0FfBx49vk8T2lUFrV6dTFwyvD3dzP1bPozwGLgpNr21cUOAlZucXvlFPs8574kv5HkuiRrkzwK/Amw/1TjVdV64MHpn470/FnU6tU3gTcmWcBgZv2cok7ySeB44C1VtW4746zmuUsTC6fYZ+uSvxi4ElhYVS9lMGvPFuP9YowkezJY/pDGxqJWl6pqLXA98FXgnqpaPrktydkMZtnHVtV0s9lvAO9L8qphqX58hIffG3ioqjYkOXL4WJMuA96W5DeTvAT4FL6ONGb+A1PPLmbwJuDWyx6fBn4ZWJHk8eHPx6YaoKq+BXwBuA5YAUyucz+1ncd9P/CpJI8Bf8Wg7CfHWwZ8YJhpNfAwsGoHn5e0Q+IXB2g2SfIq4A5gj6ra2DqPNApn1NrlJXlnkj2S7Av8LfBvlrReTCxqzQZ/DKwBfgJsAk5vG0faMS59SFLnnFFLUufGclGmOXPn1x577TeOoUe2cX4ffynMXdP++j6b5vVx7a3dnmn/Ab6n9u1jbrLb060TwG6drNJv3LN1ApjY3jlAO8nT6x5i45PrM9W2sbyC99hrPxadcOY4hh7Zmte3L0iAV537SOsIrFu0b+sIAMz7eftXw92/N7d1BADmr2z/P4x5D/QxmXngiPY59v5J+/8eKy793Da3tU8nSdoui1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSercSEWd5LgkP0qyIslHxx1KkrTZtEWdZAL4EnA8sAg4JcmicQeTJA2MMqM+ElhRVXdX1dPApcDbxxtLkjRplKI+GFi5xe1Vw/ueI8lpSZYmWbpxw/qZyidJs96MvZlYVedX1ZKqWjJn7vyZGlaSZr1Rivp+YOEWtxcM75Mk7QSjFPXNwCuTHJrkJcDJwJXjjSVJmjTtdyZW1cYkHwSuBSaAC6tq2diTSZKAEb/ctqquBq4ecxZJ0hT8ZKIkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktS5ka71saPmHvAkh72/7XWbnvzm4qaPP+nh1+7XOgLX/N3ft44AwFvO/nDrCNRu1ToCAAuufbB1BDYcvHfrCADs/5mftY7Am669q3UEzvnPddvc5oxakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2btqiTXJhkTZI7dkYgSdJzjTKj/hpw3JhzSJK2YdqirqrvAg/thCySpCm4Ri1JnZuxok5yWpKlSZZueGTDTA0rSbPejBV1VZ1fVUuqasncfebO1LCSNOu59CFJnRvl9LxLgO8BhyVZleQPxx9LkjRp2i+3rapTdkYQSdLUXPqQpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6N+21Pp6PJx6ex22XLx7H0CN75qjHmj7+pHcedmvrCJx4+hmtIwDw2GvSOgLzV7XPAHDXWfNbR+DExbe3jgDAq/dc1ToCXzz3Xa0j8OCaO7e5zRm1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS56Yt6iQLk1yX5M4ky5L0cSk2SZolRrnM6UbgI1V1a5K9gVuSfLuqtn1NPknSjJl2Rl1Vq6vq1uHvjwHLgYPHHUySNLBDa9RJDgEOB26aYttpSZYmWbrpyfUzk06SNHpRJ9kLuBz4UFWt23p7VZ1fVUuqasnEvPbfXiFJu4qRijrJ7gxK+qKqumK8kSRJWxrlrI8AXwGWV9Xnxh9JkrSlUWbURwOnAsckuX3489Yx55IkDU17el5V3QD08dXNkjQL+clESeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpc6N8FdcOW3TgGm4884vjGHpkJ77hXU0ff9KvXrOqdQT+/cCJ1hEA+PQf/HPrCLxj/uOtIwDwl2te3ToCJ+1zc+sIANz7zH6tI3Dg9x5tHYF71m/a5jZn1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknq3LRFnWRukv9N8v0ky5J8cmcEkyQNjHL1vKeAY6rq8SS7Azck+VZV3TjmbJIkRijqqipg8tqQuw9/apyhJEmbjbRGnWQiye3AGuDbVXXTeGNJkiaNVNRVtamqXgssAI5MsnjrfZKclmRpkqUPPPjsTOeUpFlrh876qKpHgOuA46bYdn5VLamqJfu/zJNJJGmmjHLWxwFJ9hn+Pg94M3DXuINJkgZGOevjl4B/SjLBoNi/UVVXjTeWJGnSKGd9/AA4fCdkkSRNwcVkSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpc6NclGmHrd20B//wyKHjGHpkG+++t+njT3rzvNWtI/DlH29oHQGAc+87pnUEvnzq060jALD+iIWtI/Avv/aG1hEAeOLlG1tHYJ/XjaUKd8jGlRPb3OaMWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMjF3WSiSS3JblqnIEkSc+1IzPqM4Dl4woiSZraSEWdZAFwAnDBeONIkrY26oz688BZwLPb2iHJaUmWJln6+EPPzEg4SdIIRZ3kbcCaqrple/tV1flVtaSqluy13+4zFlCSZrtRZtRHAycmuRe4FDgmydfHmkqS9AvTFnVVnV1VC6rqEOBk4DtV9Z6xJ5MkAZ5HLUnd26Gv3q2q64Hrx5JEkjQlZ9SS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnUlUzP2iyFrjvBQyxP/DADMV5sfNYbOax2MxjsdmucixeXlUHTLVhLEX9QiVZWlVLWufogcdiM4/FZh6LzWbDsXDpQ5I6Z1FLUud6LerzWwfoiMdiM4/FZh6LzXb5Y9HlGrUkabNeZ9SSpCGLWpI6111RJzkuyY+SrEjy0dZ5WkmyMMl1Se5MsizJGa0ztZZkIsltSa5qnaWlJPskuSzJXUmWJ3ld60ytJDlz+Pq4I8klSea2zjQOXRV1kgngS8DxwCLglCSL2qZqZiPwkapaBBwFfGAWH4tJZwDLW4fowDnANVX1K8BrmKXHJMnBwJ8BS6pqMTABnNw21Xh0VdTAkcCKqrq7qp4GLgXe3jhTE1W1uqpuHf7+GIMX48FtU7WTZAFwAnBB6ywtJXkp8FvAVwCq6umqeqRtqqbmAPOSzAH2BH7WOM9Y9FbUBwMrt7i9illcTpOSHAIcDtzUNklTnwfOAp5tHaSxQ4G1wFeHy0AXJJnfOlQLVXU/8Fngp8Bq4NGq+o+2qcajt6LWVpLsBVwOfKiq1rXO00KStwFrquqW1lk6MAc4Ajivqg4H1gOz8r2cJPsy+Iv7UOAgYH6S97RNNR69FfX9wMItbi8Y3jcrJdmdQUlfVFVXtM7T0NHAiUnuZbAcdkySr7eN1MwqYFVVTf51dRmD4p6NjgXuqaq1VfUMcAXw+saZxqK3or4ZeGWSQ5O8hMEbA1c2ztREkjBYh1xeVZ9rnaelqjq7qhZU1SEM/k18p6p2yZnTdKrq58DKJIcN73oTcGfDSC39FDgqyZ7D18ub2EXfWJ3TOsCWqmpjkg8C1zJ4B/fCqlrWOFYrRwOnAj9Mcvvwvo9V1dUNM6kPfwpcNJzM3A28r3GeJqrqpiSXAbcyOEvqNnbRj5P7EXJJ6lxvSx+SpK1Y1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalz/w9cGzGwgznpGwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.StdSemiring)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sampled"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.SampledSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.SampledSemiring)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.MultiSampledSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.MultiSampledSemiring)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Entropy"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.EntropySemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADWCAYAAAD4p8hZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAANV0lEQVR4nO3dfaxkdX3H8fendx/EhQIRG4HdFozEQjCV5kq1tEUBWxCqNW0JWDExbddStdCSUNBI1UTTpsaIKYFQBJvIQyyalFKUmgjxoYBeHnxYFuuK4i4PYUFk2UuA3eXbP2auu2zv7p2FO/v7sff9Sm5yZ87Jbz5zduazv3vmzDmpKiRJ/fql1gEkSTtnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ill6gJD9JckLrHNpzWdR60UnyiSQ/TPJEknuSvKt1JmmcFrUOID0P08AfAv8LvA74cpI1VfU/L3TgJBNVteWFjiPNJ2fU6k6Sv09y7Xb3XZjk0wBV9Q9VdU9VPVtVtwFfB96wk/HOTfJgkgeS/EWSSvKq4bLPJrk4yQ1JpoE3JTk5yZ1JNiRZm+TD2413RpL7kjya5IPz/fyl7VnU6tE1wFuS7AODWS5wKnDV9ism2YvBrHrVbAMlORH4O+AE4FXAG2dZ7R3Ax4B9gG8wmLG/C9gPOBk4M8kfDcc7ArgYOAM4CHgZsPz5PU1pNBa1ulNV9wF3AG8f3nUc8GRV3TrL6pcA3wFu3MFwpwJXVNWqqnoS+PAs6/xHVX1zOEN/qqpurqrvDW9/F7gaOHa47p8A11fV16rqaeBDwLPP53lKo7Ko1aurgNOHv7+D2WfT/wwcCZxaOz672EHA2m1ur51lnefcl+S3ktyUZH2Sx4G/Ag6YbbyqmgYenfvpSM+fRa1e/TvwxiTLGcysn1PUST4CnAT8flVt2Mk4D/LcXRMrZlln+5K/CrgOWFFV+zKYtWeb8X4xRpKXMtj9IY2NRa0uVdV64GbgCuDHVbV6ZlmS8xnMsk+oqrlms58H3p3k8GGpfmiEh98H+FlVPZXk6OFjzbgWOCXJ7yRZAnwU30caM19g6tlVDD4E3H63x8eBXwXWJNk4/PnAbANU1ZeATwM3AWuAmf3cT+/kcf8a+GiSJ4ALGJT9zHirgPcOMz0IPAas28XnJe2SeOEALSRJDge+Dyytqs2t80ijcEatPV6StydZmmR/4J+A/7Sk9WJiUWsheA/wMPAjYAtwZts40q5x14ckdc4ZtSR1biwnZZrYe1ktetn+4xh6dJ38F5SnM/dKY7ZoZ8c37EablrVOAK/Zf33rCAD84L4D5l5pzJ5d1P61CZAt7f+q3/TLrRPA5kcfY8vG6Vn/UcZS1Itetj+vOP+scQw9ur36OAHaXvcubR2B/X7YxzecH9rhaZN2n2/96SWtIwBw7HtWto7AU/tNtI4AwNIN7d+ra09qnQAe+tiFO1zWybxTkrQjFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktS5kYo6yYlJfpBkTZLzxh1KkrTVnEWdZAK4CDgJOAI4PckR4w4mSRoYZUZ9NLCmqu6tqmeAa4C3jTeWJGnGKEV9MLB2m9vrhvc9R5KVSaaSTG3ZOD1f+SRpwZu3DxOr6tKqmqyqyYm9O7iUhyTtIUYp6vuBFdvcXj68T5K0G4xS1N8GDktyaJIlwGnAdeONJUmaMec1E6tqc5L3ATcCE8DlVbVq7MkkScCIF7etqhuAG8acRZI0C7+ZKEmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdW6kc33sqmwOSx+ZGMfQIzvgu2n6+DMWb9zUOgIb3vt46wgALNq4V+sITF5wZusIAPzKmkdaR+Cc6/6rdQQALvqzP24dgdtOvqR1BP7goh2/JpxRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzcxZ1ksuTPJzk+7sjkCTpuUaZUX8WOHHMOSRJOzBnUVfV14Cf7YYskqRZuI9akjo3b0WdZGWSqSRTW6an52tYSVrw5q2oq+rSqpqsqsmJZcvma1hJWvDc9SFJnRvl8LyrgVuAVydZl+TPxx9LkjRjzovbVtXpuyOIJGl27vqQpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6N+e5Pp6PxRuLA7+5aRxDj+zAC37U9PFnfOf6w1tHYMVHl7aOAMDmDz7TOgKPvm5J6wgALHto/9YRuPyB320dAYBHXrt36wgcP/WXrSNw7/S/7nCZM2pJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOzVnUSVYkuSnJ3UlWJTlrdwSTJA2McprTzcA5VXVHkn2A25N8paruHnM2SRIjzKir6sGqumP4+xPAauDgcQeTJA3s0j7qJIcARwG3zbJsZZKpJFObnpmen3SSpNGLOsnewBeAs6tqw/bLq+rSqpqsqsnFS5bNZ0ZJWtBGKuokixmU9JVV9cXxRpIkbWuUoz4CfAZYXVWfHH8kSdK2RplRHwOcARyX5K7hz1vGnEuSNDTn4XlV9Q0guyGLJGkWfjNRkjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknq3CiX4tplm/YJ9x+7eBxDj2zJMY81ffwZi9/fOgFMrH+8dQQAzj/8660j8HFObB0BgEfe3X6O9MqlT7aOAMCrz7yldQS+96Z9W0dg3YZNO1zW/tUiSdopi1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSercnEWd5CVJvpXkO0lWJfnI7ggmSRoY5ex5TwPHVdXGJIuBbyT5UlXdOuZskiRGKOqqKmDj8Obi4U+NM5QkaauR9lEnmUhyF/Aw8JWqum28sSRJM0Yq6qraUlWvBZYDRyc5cvt1kqxMMpVkasv09HznlKQFa5eO+qiqnwM3wf+/TEZVXVpVk1U1ObFs2Xzlk6QFb5SjPl6eZL/h73sBbwbuGXcwSdLAKEd9HAj8W5IJBsX++aq6fryxJEkzRjnq47vAUbshiyRpFn4zUZI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6twoJ2XaZbW42PSKTeMYemQTh72y6ePPuP28f2kdgVNuekfrCAD840Wnt47Akif7uDjRo6/b3DoCU7e+pnUEAO46u/175M1Hr2wdgWdvWbrDZc6oJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOjdyUSeZSHJnkuvHGUiS9Fy7MqM+C1g9riCSpNmNVNRJlgMnA5eNN44kaXujzqg/BZwLPLujFZKsTDKVZGrLE9PzEk6SNEJRJzkFeLiqbt/ZelV1aVVNVtXkxD7L5i2gJC10o8yojwHemuQnwDXAcUk+N9ZUkqRfmLOoq+r8qlpeVYcApwFfrap3jj2ZJAnwOGpJ6t4uXYW8qm4Gbh5LEknSrJxRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnUtVzf+gyXrgvhcwxAHAI/MU58XObbGV22Irt8VWe8q2+LWqevlsC8ZS1C9Ukqmqmmydowdui63cFlu5LbZaCNvCXR+S1DmLWpI612tRX9o6QEfcFlu5LbZyW2y1x2+LLvdRS5K26nVGLUkasqglqXPdFXWSE5P8IMmaJOe1ztNKkhVJbkpyd5JVSc5qnam1JBNJ7kxyfessLSXZL8m1Se5JsjrJG1pnaiXJ3w7fH99PcnWSl7TONA5dFXWSCeAi4CTgCOD0JEe0TdXMZuCcqjoCeD3w3gW8LWacBaxuHaIDFwJfrqpfB36DBbpNkhwM/A0wWVVHAhPAaW1TjUdXRQ0cDaypqnur6hngGuBtjTM1UVUPVtUdw9+fYPBmPLhtqnaSLAdOBi5rnaWlJPsCvwd8BqCqnqmqn7dN1dQiYK8ki4CXAg80zjMWvRX1wcDabW6vYwGX04wkhwBHAbe1TdLUp4BzgWdbB2nsUGA9cMVwN9BlSZa1DtVCVd0PfAL4KfAg8HhV/XfbVOPRW1FrO0n2Br4AnF1VG1rnaSHJKcDDVXV76ywdWAT8JnBxVR0FTAML8rOcJPsz+Iv7UOAgYFmSd7ZNNR69FfX9wIptbi8f3rcgJVnMoKSvrKovts7T0DHAW5P8hMHusOOSfK5tpGbWAeuqauavq2sZFPdCdALw46paX1WbgC8Cv90401j0VtTfBg5LcmiSJQw+GLiucaYmkoTBfsjVVfXJ1nlaqqrzq2p5VR3C4DXx1araI2dOc6mqh4C1SV49vOt44O6GkVr6KfD6JC8dvl+OZw/9YHVR6wDbqqrNSd4H3MjgE9zLq2pV41itHAOcAXwvyV3D+z5QVTc0zKQ+vB+4cjiZuRd4d+M8TVTVbUmuBe5gcJTUneyhXyf3K+SS1Lnedn1IkrZjUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTO/R/9zClvxOhsFwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.EntropySemiring)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sparsemax"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: torch_struct.SparseMaxSemiring "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADWCAYAAAD4p8hZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAMv0lEQVR4nO3df6zddX3H8eeLtlAKHbApGdBmsMCEyjJY7kBkbq5iRCEyk42AsUvIlm4KG24mDLe4OJclW7IYJCEsiOASfgWRREZQ5wbE4BQthQGlMCs/bKGmnUWB8quF9/4459pSb+m55Z5+PvQ+H8lNzjnfbz73db/3nlc+9/v9nu83VYUkqV/7tA4gSXp9FrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaukNSvJ4ktNa59Dey6LWm06Ss5P8d5Lnk9zZOo80bnNbB5B2wybgEuBYYOlMDpxkTlW9MpNjSm+UM2p1J8lfJ7lph9c+l+RSgKr6z6q6EXhqxPEuSrI+yVNJ/iRJJTl6uOyLSS5PcluSzcDvJTkjyb1JnkmyNsmndxhvWZInkvw4yd/OyA8tvQ6LWj26AfhAkoUwmOUCZwPXTXegJKcDfwWcBhwNvHuK1T4M/COwELgL2Az8EXAwcAbw0SS/PxxvCXA5sAw4HPglYNF0c0nTYVGrO1X1BLAS+NDwpaXA81X1nd0Y7mzg6qpaVVXPA5+eYp2vVNW3qurVqnqxqu6sqgeGz+8Hrgd+d7juHwC3VtU3q+ol4FPAq7uRSxqZRa1eXQecO3z8YXZjNj10OLB2u+drp1jnNa8lOTnJHUk2Jvkp8GfAW6Yar6o2Az/ezWzSSCxq9epLwLuTLGIws97dol7Pa3dNLJ5inR0vIXkdcAuwuKoOAv4VyHbj/WyMJAsY7P6QxsaiVpeqaiNwJ3A18FhVrZ5clmROkvkMzlraJ8n8JPN2MtSNwHlJjhuW6qdG+PYLgU1V9WKSkxjM6CfdBJyZ5LeT7At8Bt9HGjP/wNSz6xgcBNxxNr0MeIHBQb13DR9/fqoBquqrwKXAHcAaYHI/90uv830/BnwmybPA3zEo+8nxVgHnDzOtB54G1k3nh5KmK944QLNJkuOAB4H9qmpr6zzSKJxRa6+X5ENJ9ktyCPDPwL9b0nozsag1G/wpsAH4AfAK8NG2caTpcdeHJHXOGbUkdW4sF2Wat+8BNX/+IeMYemQ1L7teaQ/YZ9Pm1hH6sWB+6wT82tGbWkcA4H/vX9A6grZTv9D+9/HiC0+z5eXNUxbXWIp6/vxDmDjpgnEMPbIXDt3ZabV71sIbdudTz3unvP341hH42i3XtI4AwPsOP6F1BG3n5VN/q3UEVn7r0p0uc9eHJHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjo3UlEnOT3JI0nWJLl43KEkSdvssqiTzAEuA94PLAHOTbJk3MEkSQOjzKhPAtZU1aNV9TJwA3DWeGNJkiaNUtRHAGu3e75u+NprJFmeZEWSFVu2eLF8SZopM3YwsaquqKqJqpqYN++AmRpWkma9UYr6SWDxds8XDV+TJO0BoxT194BjkhyVZF/gHOCW8caSJE3a5T0Tq2prkguArwNzgKuqatXYk0mSgBFvbltVtwG3jTmLJGkKfjJRkjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknq3EjX+piuPPs8c2+/ZxxDj2xh0+/el+f+8OTWEQA44KmXWkfgfYef0DpCNzZ85djWEQA49KyHW0fguH94oHUEHlr2wk6XOaOWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUud2WdRJrkqyIcmDeyKQJOm1RplRfxE4fcw5JEk7scuirqpvApv2QBZJ0hTcRy1JnZuxGwckWQ4sB5jPgpkaVpJmvRmbUVfVFVU1UVUT89hvpoaVpFnPXR+S1LlRTs+7Hvg28LYk65L88fhjSZIm7XIfdVWduyeCSJKm5q4PSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpczN2PerefP+yk1tHAOCY8+9uHYEDv9Q+A8CGj72zdQQO3fLrrSMMfPeB1gl4ds3BrSMAcGjrAMDdnz+xdQQ2b7xzp8ucUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHVul0WdZHGSO5I8lGRVkgv3RDBJ0sAolzndCnyiqlYmWQjck+QbVfXQmLNJkhhhRl1V66tq5fDxs8Bq4IhxB5MkDUzrxgFJjgROBH7uSvRJlgPLAeazYAaiSZJgGgcTkxwIfBn4eFU9s+PyqrqiqiaqamIe+81kRkma1UYq6iTzGJT0tVV183gjSZK2N8pZHwG+AKyuqs+OP5IkaXujzKhPBZYBS5PcN/z6wJhzSZKGdnkwsaruArIHskiSpuAnEyWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5N68YBbybHnP9z9zZQY8+e+kLrCPziI/u2jgDAPu86sXUE5m/sY5722D+d0joCR1387dYR+EFt3umyPn5TkqSdsqglqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTO7bKok8xP8t0k/5NkVZK/3xPBJEkDo1w97yVgaVU9l2QecFeSr1bVd8acTZLECEVdVQU8N3w6b/hV4wwlSdpmpH3USeYkuQ/YAHyjqrzYsyTtISMVdVW9UlUnAIuAk5Icv+M6SZYnWZFkxRZemumckjRrTeusj6r6CXAHcPoUy66oqomqmpjHfjOVT5JmvVHO+nhrkoOHj/cH3gs8PO5gkqSBUc76OAz4tyRzGBT7jVV163hjSZImjXLWx/1A+ztxStIs5ScTJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzmVwA5eZddD+h9Upv3rejI87Ha+s/n7T7z/pzFVPt47ArW8/pHUE7WDuYb/cOgJb1/+odQTA98iku+u/eKY2ZaplzqglqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6N3JRJ5mT5N4kt44zkCTptaYzo74QWD2uIJKkqY1U1EkWAWcAV443jiRpR6POqC8BLgJe3dkKSZYnWZFkxcuvPD8j4SRJIxR1kjOBDVV1z+utV1VXVNVEVU3sO2fBjAWUpNlulBn1qcAHkzwO3AAsTXLNWFNJkn5ml0VdVZ+sqkVVdSRwDnB7VX1k7MkkSYDnUUtS9+ZOZ+WquhO4cyxJJElTckYtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1LlU184MmG4En3sAQbwH+b4bivNm5LbZxW2zjtthmb9kWv1JVb51qwViK+o1KsqKqJlrn6IHbYhu3xTZui21mw7Zw14ckdc6ilqTO9VrUV7QO0BG3xTZui23cFtvs9duiy33UkqRtep1RS5KGLGpJ6lx3RZ3k9CSPJFmT5OLWeVpJsjjJHUkeSrIqyYWtM7WWZE6Se5Pc2jpLS0kOTnJTkoeTrE5ySutMrST5y+H748Ek1yeZ3zrTOHRV1EnmAJcB7weWAOcmWdI2VTNbgU9U1RLgHcD5s3hbTLoQWN06RAc+B3ytqo4FfoNZuk2SHAH8BTBRVccDc4Bz2qYaj66KGjgJWFNVj1bVy8ANwFmNMzVRVeurauXw8bMM3oxHtE3VTpJFwBnAla2ztJTkIOB3gC8AVNXLVfWTtqmamgvsn2QusAB4qnGeseitqI8A1m73fB2zuJwmJTkSOBG4u22Spi4BLgJebR2ksaOAjcDVw91AVyY5oHWoFqrqSeBfgB8C64GfVtV/tE01Hr0VtXaQ5EDgy8DHq+qZ1nlaSHImsKGq7mmdpQNzgd8ELq+qE4HNwKw8lpPkEAb/cR8FHA4ckOQjbVONR29F/SSweLvni4avzUpJ5jEo6Wur6ubWeRo6FfhgkscZ7A5bmuSatpGaWQesq6rJ/65uYlDcs9FpwGNVtbGqtgA3A+9snGkseivq7wHHJDkqyb4MDgzc0jhTE0nCYD/k6qr6bOs8LVXVJ6tqUVUdyeBv4vaq2itnTrtSVT8C1iZ52/Cl9wAPNYzU0g+BdyRZMHy/vIe99MDq3NYBtldVW5NcAHydwRHcq6pqVeNYrZwKLAMeSHLf8LW/qarbGmZSH/4cuHY4mXkUOK9xniaq6u4kNwErGZwldS976cfJ/Qi5JHWut10fkqQdWNSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpc/8Pr7zutdkrqtwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADWCAYAAAD4p8hZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAM70lEQVR4nO3df6zddX3H8efLtlAKHbApGVA2WGBKZRksVxC7Hw7ZBGEyk42AEROypZvChpsJAxc3ddmyZcYoCWFhCC7hVxRJZARhZkAcTqvlh0ApSOWHFGraCUopPwvv/XHO9ZZ6yz2Fe/r50Pt8JDe553y/+ZzX+bbnlc/9nHO+31QVkqR+vaF1AEnSK7OoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLr1GSh5Ic2zqHdl4WtV53knw6yf1JNia5N8kHW2eSxml+6wDSq7AJ+APge8DbgOuTrKmq/32tAyeZV1UvvtZxpNnkjFrdSfI3Sa7a6r7PJTkPoKr+vqruraqXqmoF8D/A0a8w3tlJ1iV5LMmfJqkkBw+3fSHJBUmuS7IJ+N0kJyS5PcmTSR5J8omtxjstycNJfpTkb2f7+Utbs6jVoyuB9yRZDINZLnAycPnWOybZjcGsetV0AyU5Dvhr4FjgYOCd0+z2fuAfgcXALQxm7B8E9gJOAD6U5A+H4y0FLgBOA/YDfgFY8uqepjQai1rdqaqHgduA9w3vOgZ4uqq+Nc3u/wZ8F7hhG8OdDFxSVauq6mngE9Ps85Wq+sZwhv5sVd1cVXcNb98JXAH8znDfPwKuraqvV9VzwMeBl17N85RGZVGrV5cDpw5/fz/Tz6b/FTgMOLm2fXax/YBHtrj9yDT7vOy+JEcluSnJhiQ/Af4ceON041XVJuBHMz8d6dWzqNWrLwHvTLKEwcz6ZUWd5JPA8cDvV9WTrzDOOl6+NHHANPtsXfKXA9cAB1TVngxm7dlivJ+OkWQRg+UPaWwsanWpqjYANwOXAA9W1erJbUnOZTDLPraqZprNfhE4Pcmhw1L9+AgPvxh4vKqeTXLk8LEmXQWcmOQ3k+wCfApfRxoz/4OpZ5czeBNw62WPfwJ+CViT5Knhz8emG6CqvgqcB9wErAEm17mfe4XH/TDwqSQbgb9jUPaT460CzhhmWgc8AazdzuclbZd44QDNJUkOBe4Gdq2qza3zSKNwRq2dXpL3Jdk1yd7AvwD/aUnr9cSi1lzwZ8B64PvAi8CH2saRto9LH5LUOWfUktS5sZyUacEuu9fChXuPY+iR1YLMvNMO8IbHN7WO0I9FC1sn4FcPfrx1BAC+d+ei1hG0hfq59v8ezz7zBC88v2na4hpLUS9cuDcTR545jqFH9sw+C5o+/qTFV073ree5KW89rHUErr/m0tYRAHj3foe3jqAtPL/sba0jcNs3ztvmNpc+JKlzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktS5kYo6yXFJ7kuyJsk54w4lSZoyY1EnmQecDxwPLAVOTbJ03MEkSQOjzKiPBNZU1QNV9TxwJXDSeGNJkiaNUtT7A49scXvt8L6XSbI8ycokK194wZPlS9JsmbU3E6vqwqqaqKqJBQt2n61hJWnOG6WoHwUO2OL2kuF9kqQdYJSi/g5wSJKDkuwCnAJcM95YkqRJM14zsao2JzkTuAGYB1xcVavGnkySBIx4cduqug64bsxZJEnT8JuJktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS50Y618f2ysanmX/jreMYemSLmz56X57646NaRwBg98eeax2Bd+93eOsI3Vj/lbe0jgDAPifd2zoCh/7DXa0jcM9pz2xzmzNqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHVuxqJOcnGS9Unu3hGBJEkvN8qM+gvAcWPOIUnahhmLuqq+Djy+A7JIkqbhGrUkdW7WLhyQZDmwHGAhi2ZrWEma82ZtRl1VF1bVRFVNLGDX2RpWkuY8lz4kqXOjfDzvCuCbwJuTrE3yJ+OPJUmaNOMadVWduiOCSJKm59KHJHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUuVk7H3Vv7j//qNYRADjkjBWtI7DHl9pnAFj/4Xe0jsA+L/xa6wgD376rdQI2rtmrdQQA9mkdAFjx70e0jsCmDTdvc5szaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM7NWNRJDkhyU5J7kqxKctaOCCZJGhjlNKebgY9W1W1JFgO3JvlaVd0z5mySJEaYUVfVuqq6bfj7RmA1sP+4g0mSBrbrwgFJDgSOAH7mTPRJlgPLARayaBaiSZJgO95MTLIH8GXgI1X15Nbbq+rCqpqoqokF7DqbGSVpThupqJMsYFDSl1XV1eONJEna0iif+gjweWB1VX1m/JEkSVsaZUa9DDgNOCbJHcOf94w5lyRpaMY3E6vqFiA7IIskaRp+M1GSOmdRS1LnLGpJ6pxFLUmds6glqXMWtSR1zqKWpM5Z1JLUOYtakjpnUUtS5yxqSercdl044PXkkDN+5toGamzjsmdaR+Dn79uldQQA3vBbR7SOwMINfczTHvzno1tH4KBzvtk6At+vTdvc1se/lCRpmyxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpczMWdZKFSb6d5LtJViX55I4IJkkaGOXsec8Bx1TVU0kWALck+WpVfWvM2SRJjFDUVVXAU8ObC4Y/Nc5QkqQpI61RJ5mX5A5gPfC1qvJkz5K0g4xU1FX1YlUdDiwBjkxy2Nb7JFmeZGWSlS/w3GznlKQ5a7s+9VFVPwZuAo6bZtuFVTVRVRML2HW28knSnDfKpz7elGSv4e+7Ab8H3DvuYJKkgVE+9bEv8B9J5jEo9i9W1bXjjSVJmjTKpz7uBNpfiVOS5ii/mShJnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHUugwu4zK49d9u3jv6V02d93O3x4ur7mz7+pBNXPdE6Ate+de/WEbSV+fv+YusIbF73w9YRAF8jk1bUf/NkPZ7ptjmjlqTOWdSS1DmLWpI6Z1FLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzlnUktQ5i1qSOmdRS1LnLGpJ6tzIRZ1kXpLbk1w7zkCSpJfbnhn1WcDqcQWRJE1vpKJOsgQ4AbhovHEkSVsbdUb9WeBs4KVt7ZBkeZKVSVY+/+LTsxJOkjRCUSc5EVhfVbe+0n5VdWFVTVTVxC7zFs1aQEma60aZUS8D3pvkIeBK4Jgkl441lSTpp2Ys6qo6t6qWVNWBwCnAjVX1gbEnkyQBfo5akro3f3t2rqqbgZvHkkSSNC1n1JLUOYtakjpnUUtS5yxqSeqcRS1JnbOoJalzFrUkdc6ilqTOWdSS1DmLWpI6Z1FLUudSVbM/aLIBePg1DPFG4P9mKc7rncdiisdiisdiys5yLH65qt403YaxFPVrlWRlVU20ztEDj8UUj8UUj8WUuXAsXPqQpM5Z1JLUuV6L+sLWATrisZjisZjisZiy0x+LLteoJUlTep1RS5KGLGpJ6lx3RZ3kuCT3JVmT5JzWeVpJckCSm5Lck2RVkrNaZ2otybwktye5tnWWlpLsleSqJPcmWZ3k6NaZWknyV8PXx91JrkiysHWmceiqqJPMA84HjgeWAqcmWdo2VTObgY9W1VLg7cAZc/hYTDoLWN06RAc+B1xfVW8Bfp05ekyS7A/8JTBRVYcB84BT2qYaj66KGjgSWFNVD1TV88CVwEmNMzVRVeuq6rbh7xsZvBj3b5uqnSRLgBOAi1pnaSnJnsBvA58HqKrnq+rHbVM1NR/YLcl8YBHwWOM8Y9FbUe8PPLLF7bXM4XKalORA4AhgRdskTX0WOBt4qXWQxg4CNgCXDJeBLkqye+tQLVTVo8CngR8A64CfVNV/tU01Hr0VtbaSZA/gy8BHqurJ1nlaSHIisL6qbm2dpQPzgd8ALqiqI4BNwJx8LyfJ3gz+4j4I2A/YPckH2qYaj96K+lHggC1uLxneNyclWcCgpC+rqqtb52loGfDeJA8xWA47JsmlbSM1sxZYW1WTf11dxaC456JjgQerakNVvQBcDbyjcaax6K2ovwMckuSgJLsweGPgmsaZmkgSBuuQq6vqM63ztFRV51bVkqo6kMH/iRuraqecOc2kqn4IPJLkzcO73gXc0zBSSz8A3p5k0fD18i520jdW57cOsKWq2pzkTOAGBu/gXlxVqxrHamUZcBpwV5I7hvd9rKqua5hJffgL4LLhZOYB4PTGeZqoqhVJrgJuY/ApqdvZSb9O7lfIJalzvS19SJK2YlFLUucsaknqnEUtSZ2zqCWpcxa1JHXOopakzv0/YwEPYWXOFx0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPUAAAEICAYAAACHyrIWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAQTElEQVR4nO3dfYwc9X3H8ffHd2cbm2dsEvwQ7BLk1KVQO1cMIRAEtDwKEEItNCaEtnH6ABhKRAFVCUpBUSOKQCWFGhNQGwJNDU1SSoGWBzWkwclhaIl90IDt2Gds/ITB2Mb24W//2HG1rG9vx3czzN3Pn5e00s7O7He/s7efnd/M7c4qIjCzdIyougEzK5ZDbZYYh9osMQ61WWIcarPEONRmiXGoB0HSA5Juya6fLOm1qnvaV0laLumMqvsYChzqHCQ9J+ltSaOaLRMRP4qIaR9lX0VwGNLjULcgaQpwMhDA+ZU2Y5aDQ93aF4AXgAeAy5stJOlUST110zMlvSRps6R/kvSPdUP1UyX1SLpO0lpJqyVdUXffByT9raR/k/SepB9L+rikO7IRw6uSZtQtP0HSI5LWSVom6eq6eTdL+p6kv896WSypM5v3D8AngH/JHuf6Jut2nqSXJW2S9F+Sjs1uP0rSRkkz6/pYJ+nUbPoKSd3Z4y6V9OXG50vS9XXPwYWSzpH0v1ndmxrWY0H2PG6WtEjScU36HSHpBklvSNqQrf+hzf52yYkIX/q5AK8DfwJ8GtgJfKxu3gPALdn1U4Ge7PpI4JfAXKADuAjY0bBsL/D1bP45wFbgkLq667PHHA08Ayyj9gbTBtwCPJstOwJ4Efhq9ri/AiwFzszm3wy8nz1GG/AN4IW6dVgOnNHP+s8A1gKzsvtfnt1nVDb/S8ASYAzwJHBb3X3PBY4CBHwuW8eZDc/BV7Pn4EvAOuC7wAHArwHbgKl167ETuDhb/ivZc9LRuB7Z8/4CMAkYBfwd8FDVr6WP7DVbdQND+QJ8NnshjcumXwWurZvfLNSnAKsA1S37fMOy24D2uvlrgRPq6t5bN+8qoLtu+teBTdn1WcCKhr5vBO7Prt8M/EfdvOnAtrrpVqG+G/jLhtteAz5XN/1D4BXgf3aHvUmt7wNzG56Dtmz6AGq7OLPqln8RuLBuPerfjEYAq4GTG9cD6AZOr1v2iOzv2N6st5QuHn7373LgqYhYn01/l36G4HUmAKsie0VlVjYssyEieuumtwL7102/VXd9Wx/Tu5c9EpiQDY03SdoE3AR8rG75NQ2PM1pSe4712F3/uob6k6mt4273AscAfxMR23ffKOlsSS9kQ+lN1EYL4+rutyEiPqhbp77Wu/45+f/nMCJ2AT0NfdT3/M91/XYDH/Dh5yRZef+w+xxJ+wG/A7RJ2h2KUcDBko6LiP/u5+6rgYmSVBfsycAbJbS6ElgWEUcP8P6tvqa3Erg1Im7ta6ak/YE7gPuAmyU9EhEbs/8UPEJtl+EHEbFT0vepDcUHanLd446gNrx+s0nPvx8RPx7EYw1b3lI3dyG1d/fpwG9kl18FfkTthdqfn2T3vVJSu6QLgONL6vOnwGZJfy5pP0ltko6R9Js57/8Wtf3wZu4F/kjSLNWMlXSupAOy+XcCXRHxh8C/Avdkt4+k9ia4DuiVdDbw23u7cg0+LemibJRxDbCd2r5zo3uAWyUdCSBpfPY32Cc41M1dTm2/dEVErNl9Ae4CPt/f8DUidlA7OPYHwCZgNvAYtRdhobLh63nU3nSWUTvANh84KGeJbwB/kQ1Vv9JH/S5qB7HuAt6mduDwiwBZUM4C/jhb/M+AmZI+HxGbgauB72X3+z1q+96D8QPgd7N6lwEXRcTOPpa7M3uspyRtphb8WYN87GFDH97ts7JIWgjcExH3V93LcCTpZuCTETG76l6GOm+pSyLpc9n/ltslXQ4cCzxRdV+WPh8oK880akPPsdT+b3xxRKyutiXbF3j4bZYYD7/NElPK8HvcoW0xZXJH4XVfXTm+8JoAbe/tKLxm7OzroKxZMd5nCztie5//8y8l1FMmd/DTJye3XnAvffbqL7deaAAO+knjh70Gr3dVX5+JMCvGwni66TwPv80S41CbJcahNkuMQ22WGIfaLDEOtVlicoVa0lmSXpP0uqQbym7KzAauZagltQHfAs6m9t3iSyVNL7sxMxuYPFvq44HXI2Jp9j3hh4F95gvnZsNNnlBP5MPn1+rJbvsQSXMkdUnqWrfhg8bZZvYRKexAWUTMi4jOiOgcf1hbUWXNbC/lCfUq6k74Ru1kb6vKacfMBitPqH8GHC1pqqSRwCUM/lxTZlaSlt/SioheSVdS+/WFNuDbEbG49M7MbEByffUyIh4HHi+5FzMrgD9RZpYYh9osMQ61WWIcarPEONRmiSnlxINLdxzAJctOK7zuX33z7sJrAlz511cWXrNjy5GF1wQY/8TSUur2rnmr9UI2LHhLbZYYh9osMQ61WWIcarPEONRmiXGozRLjUJslxqE2S4xDbZYYh9osMQ61WWIcarPEONRmiXGozRLjUJslxqE2S4xDbZYYh9osMQ61WWIcarPEONRmiVFEFF70wBGHxQkdZxVe9xffnFl4TYC2I7YWXvPYiW8WXhNgdFtvKXXfnn1wKXV7ly4vpe6+bmE8zbuxUX3N85baLDEOtVliHGqzxDjUZolxqM0S41CbJcahNktMy1BLmizpWUlLJC2WNPejaMzMBibPT9n2AtdFxCJJBwAvSvr3iFhScm9mNgAtt9QRsToiFmXXNwPdwMSyGzOzgdmrH52XNAWYASzsY94cYA7AaMYU0JqZDUTuA2WS9gceAa6JiHcb50fEvIjojIjODo0uskcz2wu5Qi2pg1qgH4yIR8ttycwGI8/RbwH3Ad0RcXv5LZnZYOTZUp8EXAacJunl7HJOyX2Z2QC1PFAWEc8DfX5v08yGHn+izCwxDrVZYhxqs8Q41GaJ2atPlOUXELsKr/qp23sKrwnAruJ73TJufOE1Ad74evEnigQYPaucEw8eunVbKXV7164vvuiuD4qvWQFvqc0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDHlnE00IHp7iy+7dWvhNQE4/LDCS7531IGF1wQ44sCVpdRdP/KQUupumfmJUuru98w7hdfc9b7PJmpmQ5BDbZYYh9osMQ61WWIcarPEONRmiXGozRKTO9SS2iS9JOmxMhsys8HZmy31XKC7rEbMrBi5Qi1pEnAuML/cdsxssPJuqe8Argea/jq7pDmSuiR17WR7Ic2Z2d5rGWpJ5wFrI+LF/paLiHkR0RkRnR2MKqxBM9s7ebbUJwHnS1oOPAycJuk7pXZlZgPWMtQRcWNETIqIKcAlwDMRMbv0zsxsQPx/arPE7NX3qSPiOeC5Ujoxs0J4S22WGIfaLDEOtVliHGqzxDjUZokp52yiJflgw8ZyCpdQd8xrbYXXBFh26fRS6h6+sZwzacYIlVJ3xISPF1/0zTXF1wR2vf9+KXWb8ZbaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0SM6zOJjqs7Crn7Jzb3xpTSt1NR5Vz9tPRG6OUum2fHFd4zY7DDyy8JkD7yvWF19RbHU3neUttlhiH2iwxDrVZYhxqs8Q41GaJcajNEuNQmyUmV6glHSxpgaRXJXVLOrHsxsxsYPJ++ORO4ImIuFjSSKCcT0CY2aC1DLWkg4BTgC8CRMQOYEe5bZnZQOUZfk8F1gH3S3pJ0nxJYxsXkjRHUpekrp1sL7xRM8snT6jbgZnA3RExA9gC3NC4UETMi4jOiOjsYFTBbZpZXnlC3QP0RMTCbHoBtZCb2RDUMtQRsQZYKWladtPpwJJSuzKzAct79Psq4MHsyPdS4IryWjKzwcgV6oh4GegsuRczK4A/UWaWGIfaLDEOtVliHGqzxDjUZonx2USHmWnzN5dS9xeXlXMmzW2ztpVSd/OSPT6pPGiTnt5ZeM0qeEttlhiH2iwxDrVZYhxqs8Q41GaJcajNEuNQmyXGoTZLjENtlhiH2iwxDrVZYhxqs8Q41GaJcajNEuNQmyXGoTZLjENtlhiH2iwxDrVZYhxqs8T4xIPDzIh3t5ZSd9pdW0qpu/HEI0qpu+HYKLzm8vPHFF4TYMJ/Tiy85q7nO5rO85baLDEOtVliHGqzxDjUZolxqM0S41CbJcahNktMrlBLulbSYkk/l/SQpNFlN2ZmA9My1JImAlcDnRFxDNAGXFJ2Y2Y2MHmH3+3AfpLagTHAm+W1ZGaD0TLUEbEKuA1YAawG3omIpxqXkzRHUpekrp1sL75TM8slz/D7EOACYCowARgraXbjchExLyI6I6Kzg1HFd2pmueQZfp8BLIuIdRGxE3gU+Ey5bZnZQOUJ9QrgBEljJAk4Heguty0zG6g8+9QLgQXAIuCV7D7zSu7LzAYo1/epI+JrwNdK7sXMCuBPlJklxqE2S4xDbZYYh9osMQ61WWJ8NtFhZteataXU1eQJ5dTdVUpZ1Ft8zd86c1HxRYG7vrCw8JrHn7m+6Txvqc0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDEOtVliHGqzxDjUZolxqM0S41CbJcahNkuMQ22WGIfaLDGKiOKLSuuAX+ZYdBzQ/LSIQ89w6nc49QrDq9+h0OuRETG+rxmlhDovSV0R0VlZA3tpOPU7nHqF4dXvUO/Vw2+zxDjUZompOtTD7cfrh1O/w6lXGF79DuleK92nNrPiVb2lNrOCOdRmiaks1JLOkvSapNcl3VBVH61ImizpWUlLJC2WNLfqnvKQ1CbpJUmPVd1LfyQdLGmBpFcldUs6seqe+iPp2ux18HNJD0kaXXVPjSoJtaQ24FvA2cB04FJJ06voJYde4LqImA6cAPzpEO613lygu+omcrgTeCIiPgUcxxDuWdJE4GqgMyKOAdqAS6rtak9VbamPB16PiKURsQN4GLigol76FRGrI2JRdn0ztRfdxGq76p+kScC5wPyqe+mPpIOAU4D7ACJiR0RsqrarltqB/SS1A2OANyvuZw9VhXoisLJuuochHhQASVOAGUDxvyJerDuA64GSfvK9MFOBdcD92a7CfEljq26qmYhYBdwGrABWA+9ExFPVdrUnHyjLSdL+wCPANRHxbtX9NCPpPGBtRLxYdS85tAMzgbsjYgawBRjKx1cOoTainApMAMZKml1tV3uqKtSrgMl105Oy24YkSR3UAv1gRDxadT8tnAScL2k5td2a0yR9p9qWmuoBeiJi98hnAbWQD1VnAMsiYl1E7AQeBT5TcU97qCrUPwOOljRV0khqBxt+WFEv/ZIkavt83RFxe9X9tBIRN0bEpIiYQu15fSYihtzWBCAi1gArJU3LbjodWFJhS62sAE6QNCZ7XZzOEDyw117Fg0ZEr6QrgSepHUH8dkQsrqKXHE4CLgNekfRydttNEfF4hT2l5CrgwezNfSlwRcX9NBURCyUtABZR+6/ISwzBj4z6Y6JmifGBMrPEONRmiXGozRLjUJslxqE2S4xDbZYYh9osMf8Hq4O+pmBBXKkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run(torch_struct.SparseMaxSemiring)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x648 with 11 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "all_sr = [(\"marginals\", torch_struct.LogSemiring), \n",
    "          (\"argmax\", torch_struct.MaxSemiring),\n",
    "          (\"sample\", torch_struct.SampledSemiring),\n",
    "          (\"multi-sample\", torch_struct.MultiSampledSemiring), \n",
    "          (\"multi-sample\", torch_struct.MultiSampledSemiring),\n",
    "          (\"kmax\", torch_struct.KMaxSemiring(4)), \n",
    "          (\"sparsemax\", torch_struct.SparseMaxSemiring), \n",
    "         ]\n",
    "\n",
    "fig=plt.figure(figsize=(10, 9))\n",
    "columns = 4\n",
    "rows = 3\n",
    "\n",
    "for i in range(2,5):\n",
    "    fig.add_subplot(rows, columns, i)\n",
    "    x = torch.arange(15).float()\n",
    "    y1 = torch.sin(x)\n",
    "    plt.plot(x, y1, \"-x\")\n",
    "    plt.xlim(0,15)\n",
    "    plt.ylim(-1, 4)\n",
    "\n",
    "    plt.axis(\"off\")\n",
    "\n",
    "for i in [5, 9]:\n",
    "    fig.add_subplot(rows, columns, i)\n",
    "    x = torch.arange(10).float()\n",
    "    y2 = torch.sin(1.4 * x)\n",
    "    plt.plot(y2, x, \"-x\")\n",
    "    plt.ylim(-4, 14)\n",
    "    plt.xlim(-3, 1)\n",
    "    plt.axis(\"off\")\n",
    "\n",
    "\n",
    "\n",
    "v = torch.zeros(1, 15, 10, 3)\n",
    "v[0, :, :, 1] = (y1.unsqueeze(1) - y2.unsqueeze(0)).abs()\n",
    "v[0, :, :, 0] = 0\n",
    "v[0, :, :, 2] = 0\n",
    "\n",
    "for i, (title, sr) in enumerate(all_sr, 2+columns):\n",
    "    if i == 9:\n",
    "        continue\n",
    "    m = torch_struct.Alignment(sr).marginals(v, _raw=True)\n",
    "    fig.add_subplot(rows, columns, i)\n",
    "    plt.title(title)\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    \n",
    "    plt.axis(\"off\")\n",
    "    plt.ylim(-0.5,10.5)\n",
    "    plt.xlim(-0.5,14.5)\n",
    "\n",
    "    plt.imshow(m.sum(-1).sum(0).sum(0).transpose(0,1).detach())\n",
    "plt.savefig(\"show.png\",)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
